The future of high performance computing depends on current research in parallel processing architectures and techniques, which in turn requires effective tools to explore parallel processing program characteristics and parallel architecture behavior. One such tool, the simulator, has been widely employed due to its flexibility. Unfortunately, the simulator suffers from innate slowness that restricts the applications capable of running on the simulated target machine. Another available tool is the parallel computer itself, including experimental and commercial multiprocessors and single-instruction-multiple-data stream (SIMD) machines capable of executing serious parallel algorithms in an acceptable time. While these powerful systems enable programmers to run significant applications and make coarse adjustments in the software, they do not permit easy evaluation of behavioral details in real time. Prior art software for making such detailed measurements is instrusive, perturbing the behavior or the parallel system by the very act of measurement.
While software simulation can provide detailed traces of any activity within a modeled computer, system, often producing enormous amounts of information, real time instrumentation cannot access all of the elements of the system. Real time instrumentation usually does not have the time and storage resources available to collect exhaustive traces in a nonintrusive manner. Fortunately, often a simple set of statistics, rather than a complete time domain trace, is sufficient. In these cases, real time instruments can be devised that record these statistics instead of progressing through the intermediate step of acquiring a time trace first.
One software based instrumentation system is described and claimed in the copending and commonly-owned United States Patent application entitled, "Method and Apparatus for Monitoring Software," filed on Apr. 4, 1986, Ser. No. 848,013. This software system monitor provides the necessary hardware support for monitoring software behavior in a nearly nonintrusive manner. The programmer divides the application program into a set of mutually exclusive, collectively exhaustive program segments. As execution shifts from one segment to another, the application program informs the software monitor of this transition. The monitor accumulates the number of segment entries, the total time spent in each segment, and also tracks nested interrupts. The monitor accumulates these statistics in memory for later analysis by the user.